#pragma once
#include <iostream>
#include <string>
#include <time.h>
namespace Ns_Log
{
    enum
    {
        INFO,
        DEBUG,
        WARNING,
        ERROR,
        FATAL
    };

    inline std::ostream &Log(const std::string &level, const std::string &file_name, int line)
    {
        std::string message;

        // 日志等级
        message += "[";
        message += level;
        message += "]";
        // 时间
        message += "[";
        // 获取时间戳
        time_t t = time(nullptr);
        // 将时间戳转换为本地时间
        struct tm *ptm = localtime(&t);
        char time_str[32];
        // 将时间格式化输出到time_str中
        strftime(time_str, 31, "%H:%M:%S", ptm);
        message += time_str;
        message += "]";

        // 文件名
        message += "[";
        message += file_name;
        message += ":";
        message += std::to_string(line);
        message += "]";

        // 把属性写入到cout缓冲区
        std::cout << message;

        return std::cout;
    }

// LOG(INFO) << message << endl;
// #level 在宏定义中使用了预处理器的字符串化操作符（#）。这个操作符可以将宏参数转换为一个字符串字面量;
// __FILE__ __LINE__ 自动获取文件名和行
#define LOG(level) Log(#level, __FILE__, __LINE__)
}